﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;
using Innvoice.BaseDeDatos.innvoicedbDataSetTableAdapters;
using System.Data;
using Innvoice.Logica.GestorObject;
using System.Windows;

namespace Innvoice.Logica.GestorDB
{
    public class RemitoDB
    {
        public string GetProximoNumeroRemito()
        {
            facturaTableAdapter facturaTablaAdpter = new facturaTableAdapter();

            int max_nroRemito1 = 0;
            int max_nroRemito2 = 0;

            string max_nroRegistro1String = "";
            string max_nroRegistro2String = "";

            try
            {
                DataTable resultadoConsulta = facturaTablaAdpter.GetMaxNro_Remitos();

                foreach (DataRow item in resultadoConsulta.Rows)
                {
                    max_nroRemito1 = Convert.ToInt16(item["MaxNroRemito1"].ToString());
                    max_nroRemito2 = Convert.ToInt16(item["MaxNroRemito2"].ToString());
                }

                if (max_nroRemito2 == 99999999)
                {
                    max_nroRemito2 = 1;
                    max_nroRemito1++;
                }
                else
                    max_nroRemito2++;

                max_nroRegistro1String = max_nroRemito1.ToString("D4");
                max_nroRegistro2String = max_nroRemito2.ToString("D8");
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message + "Error -- Class ReciboDB -- Methods GetProximoNumeroRemito()", "Cuidado", MessageBoxButton.OK);
            }

            return max_nroRegistro1String + "-" + max_nroRegistro2String;
        }

        public string GetProximoSegundoNumeroRemito()
        {
            facturaTableAdapter facturaTablaAdpter = new facturaTableAdapter();

            int max_nroRemito2 = 0;

            string max_nroRegistro2String = "";

            try
            {
                DataTable resultadoConsulta = facturaTablaAdpter.GetMaxNro_Remitos();

                foreach (DataRow item in resultadoConsulta.Rows)
                {
                    max_nroRemito2 = Convert.ToInt16(item["MaxNroRemito2"].ToString());
                }

                if (max_nroRemito2 == 99999999)
                {
                    max_nroRemito2 = 1;
                    //max_nroRemito1++;
                }
                else
                    max_nroRemito2++;

                max_nroRegistro2String = max_nroRemito2.ToString("D8");
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message + "Error -- Class ReciboDB -- Methods GetProximoSegundoNumeroRemito()", "Cuidado", MessageBoxButton.OK);
            }

            return max_nroRegistro2String;
        }

        public Cliente ObtenerClientePorCodigo(int codigo)
        {
            clienteTableAdapter clienteTablaAdapter = new clienteTableAdapter();

            Cliente cliente = new Cliente();

            try
            {
                DataTable resultadoConsulta = clienteTablaAdapter.GetDataByObtenerClientePorCodigo(codigo);

                foreach (DataRow item in resultadoConsulta.Rows)
                {
                    cliente.Codigo = Convert.ToInt16(item["codigo_cliente"].ToString());
                    cliente.RazonSocial = item["razon_social"].ToString();
                    cliente.Telefono = item["telefono"].ToString();
                    cliente.Correo = item["correo"].ToString();
                    cliente.Web = item["web"].ToString();
                    cliente.Contacto = item["contacto"].ToString();
                    cliente.NroLocalidad = Convert.ToByte(item["localidad"].ToString());
                    cliente.NroProvincia = Convert.ToByte(item["provincia"].ToString());
                    cliente.NroPais = Convert.ToByte(item["pais"].ToString());
                    cliente.NroCondicionDePago = Convert.ToByte(item["condicion_pago"]);
                    //cliente.Localidad = item["Localidaddescrip"].ToString();
                    //cliente.Provincia = item["provinciadescrip"].ToString();
                    //cliente.Pais = item["paisdescrip"].ToString();
                    cliente.Direccion = item["direccion"].ToString();
                    cliente.Tipodni = Convert.ToByte(item["tipo_dni"].ToString());
                    cliente.NroDni = item["nro_dni"].ToString();
                    cliente.CodigoPostal = item["cod_postal"].ToString();
                    cliente.NroTipoContrib = Convert.ToByte(item["tipo_contrib"].ToString());
                    //cliente.TipoContrib = item["contribuyentedescrip"].ToString();
                    cliente.Nrocontrib = item["nro_contrib"].ToString();
                    cliente.ListaDePrecio = item["lista_precio"].ToString();
                    cliente.Activo = Convert.ToByte(item["activo"]);
                    cliente.FechaAltaSistema = item["fechadealta"].ToString();
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message + "Error -- Class ReciboDB -- Methods ObtenerClientePorCodigo(int codigo)", "Cuidado", MessageBoxButton.OK);
            }

            return cliente;
        }

        public List<CondicionDePago> ObtenerCodicionesDePago()
        {
            condiciondepagoTableAdapter condicionDePagoTablaAdapter = new condiciondepagoTableAdapter();

            List<CondicionDePago> resultados = new List<CondicionDePago>();
            resultados.Clear();

            try
            {

                DataTable resultadoConsulta = condicionDePagoTablaAdapter.GetDataByCondicionesDePago();

                if (resultadoConsulta.Rows.Count > 0)
                {
                    foreach (DataRow items in resultadoConsulta.Rows)
                    {
                        CondicionDePago condicionDePago = new CondicionDePago();

                        condicionDePago.Codigo_pago = Convert.ToInt16(items["codigo_condicion"]);
                        condicionDePago.Descripcion = items["descripcion"].ToString();

                        resultados.Add(condicionDePago);
                    }
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message + "Error -- Class ReciboDB -- Methods ObtenerCodicionesDePago()", "Cuidado", MessageBoxButton.OK);
            }

            return resultados;
        }

        public List<Remito> ObtenerRemitosParaListar()
        {
            facturaTableAdapter facturaTB = new facturaTableAdapter();

            List<Remito> resultados = new List<Remito>();
            resultados.Clear();

            try
            {
                DataTable remitosConsulta = facturaTB.GetDataByListadoRemitos();

                foreach (DataRow item in remitosConsulta.Rows)
                {
                    Remito remito = new Remito();

                    int nroRemito1 = Convert.ToInt16(item["nro_remito1"].ToString());
                    int nroRemito2 = Convert.ToInt16(item["nro_remito2"].ToString());

                    remito.Fecha = Convert.ToDateTime(item["fecha"]);
                    remito.FechaString = Convert.ToDateTime(item["fecha"]).ToShortDateString();
                    remito.Comprobante = nroRemito1.ToString("D4") + "-" + nroRemito2.ToString("D8");
                    remito.Cliente.RazonSocial = item["clienteRazonSocial"].ToString().ToUpper();
                    remito.Total = 123;
                    //remito.Total = CalcularTotal(nroRemito1, nroRemito2);

                    resultados.Add(remito);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "Error -- Class ReciboDB -- Methods ObtenerRemitosParaListar()", "Cuidado", MessageBoxButton.OK);
            }

            return resultados;
        }

        #region Auxiliar Methods

        private double CalcularTotal(int nroRemito1, int nroRemito2)
        {
            cuerpoTableAdapter cuerpoTB = new cuerpoTableAdapter();

            double resultado = 0;

            try
            {
                DataTable resultadoConsulta = cuerpoTB.GetDataByCalculoDeTotal((short)nroRemito1, nroRemito2);

                foreach (DataRow item in resultadoConsulta.Rows)
                {
                    int cantidad = Convert.ToInt16(item["cantidad"].ToString());
                    decimal precio = Convert.ToDecimal(item["precio"].ToString());

                    resultado += resultado + (cantidad * Convert.ToDouble(precio));
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + " Error -- Class ReciboDB -- Methods CalcularTotal(int nroRemito1, int nroRemito2)", "Cuidado", MessageBoxButton.OK);
            }

            return resultado;
        }

        #endregion
    }
}
